/**
 * 审核通知调试工具
 * 用于在开发阶段调试和测试通知功能
 */

import globalNotificationManager from './globalNotificationManager.js'
import pageNotificationListener from './pageNotificationListener.js'

class NotificationDebugger {
  constructor() {
    this.isDebugMode = false
    this.debugLogs = []
  }

  /**
   * 启用调试模式
   */
  enableDebug() {
    this.isDebugMode = true
    console.log('🐛 启用审核通知调试模式')
    
    // 在控制台输出快捷调试命令
    console.log('📝 调试命令:')
    console.log('  window.notificationDebugger.getStatus() - 查看状态')
    console.log('  window.notificationDebugger.forceCheck() - 强制检查')
    console.log('  window.notificationDebugger.testNotification() - 测试通知')
    console.log('  window.notificationDebugger.showLogs() - 查看日志')
    console.log('  window.notificationDebugger.testPageListener() - 测试页面监听')
    console.log('  window.notificationDebugger.getPageListenerStatus() - 页面监听状态')
  }

  /**
   * 禁用调试模式
   */
  disableDebug() {
    this.isDebugMode = false
    console.log('🐛 禁用审核通知调试模式')
  }

  /**
   * 记录调试日志
   */
  log(message, data = null) {
    const timestamp = new Date().toLocaleTimeString()
    const logEntry = {
      timestamp,
      message,
      data
    }
    
    this.debugLogs.push(logEntry)
    
    // 只保留最近50条日志
    if (this.debugLogs.length > 50) {
      this.debugLogs = this.debugLogs.slice(-50)
    }

    if (this.isDebugMode) {
      console.log(`🐛 [${timestamp}] ${message}`, data || '')
    }
  }

  /**
   * 显示调试日志
   */
  showLogs() {
    console.table(this.debugLogs)
    return this.debugLogs
  }

  /**
   * 清除调试日志
   */
  clearLogs() {
    this.debugLogs = []
    console.log('🗑️ 已清除调试日志')
  }

  /**
   * 获取当前状态
   */
  getStatus() {
    const status = globalNotificationManager.getStatus()
    console.log('📊 审核通知系统状态:', status)
    
    // 格式化显示
    console.log('┌─ 轮询状态 ─┐')
    console.log(`│ 是否运行: ${status.isPolling ? '✅ 是' : '❌ 否'}`)
    console.log(`│ 检查间隔: ${status.pollingInterval / 1000}秒`)
    console.log(`│ 上次检查: ${status.lastCheckTime ? new Date(status.lastCheckTime).toLocaleString() : '从未检查'}`)
    console.log(`│ 距今时间: ${status.timeSinceLastCheck ? Math.floor(status.timeSinceLastCheck / 1000) + '秒' : 'N/A'}`)
    console.log('└─────────────┘')
    
    return status
  }

  /**
   * 强制触发检查
   */
  async forceCheck() {
    console.log('🔍 强制触发审核通知检查...')
    try {
      await globalNotificationManager.triggerCheck('调试强制检查')
      console.log('✅ 强制检查完成')
    } catch (error) {
      console.error('❌ 强制检查失败:', error)
    }
  }

  /**
   * 测试通知显示
   */
  testNotification() {
    console.log('🧪 测试通知显示...')
    
    // 检查uni是否可用
    if (typeof uni === 'undefined') {
      console.log('⚠️ uni对象不可用，无法显示测试通知')
      return
    }
    
    // 模拟审核驳回通知
    const testData = {
      type: 'listing',
      id: 'test-123',
      name: '测试公司转让信息',
      comment: '这是一个测试的驳回通知，用于验证通知功能是否正常工作。',
      time: new Date()
    }

    uni.showModal({
      title: '测试审核通知',
      content: `这是一个测试通知\n\n您的挂牌信息"${testData.name}"审核未通过。\n\n驳回原因：${testData.comment}`,
      showCancel: true,
      cancelText: '知道了',
      confirmText: '去修改',
      success: (res) => {
        if (res.confirm) {
          console.log('🔧 用户点击了"去修改"')
        } else {
          console.log('✅ 用户点击了"知道了"')
        }
      }
    })
  }

  /**
   * 模拟审核驳回数据
   */
  simulateAuditRejection() {
    console.log('🎭 模拟审核驳回数据...')
    
    // 这里可以修改API响应，但需要谨慎使用
    const mockData = {
      success: true,
      data: {
        hasUnreadAuditResults: true,
        auditResults: [
          {
            type: 'listing',
            id: 'sim-001',
            name: '模拟挂牌信息',
            comment: '模拟的驳回原因：信息不完整',
            time: new Date()
          },
          {
            type: 'service',
            id: 'sim-002',
            name: '模拟本地服务',
            comment: '模拟的驳回原因：服务描述不清楚',
            time: new Date()
          }
        ]
      }
    }

    console.log('📋 模拟数据:', mockData)
    return mockData
  }

  /**
   * 重置轮询间隔（用于调试）
   */
  setPollingInterval(seconds) {
    const milliseconds = seconds * 1000
    globalNotificationManager.updatePollingInterval(milliseconds)
    console.log(`⏰ 已设置轮询间隔为 ${seconds} 秒`)
  }

  /**
   * 启动快速轮询（用于调试）
   */
  startFastPolling() {
    this.setPollingInterval(10) // 10秒检查一次
    console.log('🚀 已启动快速轮询模式（10秒间隔）')
  }

  /**
   * 恢复正常轮询
   */
  restoreNormalPolling() {
    this.setPollingInterval(300) // 5分钟检查一次
    console.log('🔄 已恢复正常轮询模式（5分钟间隔）')
  }

  /**
   * 测试页面监听器
   */
  testPageListener() {
    console.log('🎯 测试页面监听器...')
    
    // 模拟页面进入
    pageNotificationListener.onPageEnter('test-page')
    
    // 手动触发检查
    pageNotificationListener.manualCheck('调试测试')
    
    console.log('✅ 页面监听器测试完成')
  }

  /**
   * 获取页面监听器状态
   */
  getPageListenerStatus() {
    const status = pageNotificationListener.getStatus()
    console.log('🎯 页面监听器状态:', status)
    
    console.log('┌─ 页面监听器 ─┐')
    console.log(`│ 是否激活: ${status.isActive ? '✅ 是' : '❌ 否'}`)
    console.log(`│ 当前页面: ${status.lastPagePath || '未知'}`)
    console.log(`│ 页面记录: ${Object.keys(status.pageEnterTimes).length}个`)
    console.log('└─────────────┘')
    
    return status
  }

  /**
   * 综合状态检查
   */
  getFullStatus() {
    console.log('📊 完整状态检查:')
    
    const globalStatus = this.getStatus()
    const pageStatus = this.getPageListenerStatus()
    
    return {
      global: globalStatus,
      pageListener: pageStatus,
      timestamp: new Date().toLocaleString()
    }
  }
}

// 创建调试器实例
const notificationDebugger = new NotificationDebugger()

// 在开发环境下暴露到全局
if (typeof window !== 'undefined') {
  window.notificationDebugger = notificationDebugger
}

export default notificationDebugger